/*
 * Copyright 2009 Johnson Consulting Services
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.johnsoncs.gwt.widgets.server.export;

import com.johnsoncs.gwt.widgets.client.dynamictable.export.ExportException;
import com.johnsoncs.gwt.widgets.client.dynamictable.export.ExportRequest;

/**
 * Defines the base capabilities of an export format
 * @author wilj
 *
 * @param <T> the generic type with which the table structure is associated
 */
public interface ExportFormat<T> {
	/**
	 * Exports data per the specified request and returns the URI/URL to the output
	 * @param request the export request configuration
	 * @param model the export model that will provide access to the data
	 * @param storage the storage model to use when exporting the results
	 * @return the export file name
	 * @throws ExportException
	 */
	public String export(String exportId, ExportRequest<T> request, ExportModel<T> model, ExportStorage storage)
			throws ExportException;

	/**
	 * Returns the file extension associated with the export format
	 * @return the file extension associated with the export format
	 */
	public String getFileExtension();

	/**
	 * Returns the MIME type of the export format
	 * @return the MIME type of the export format
	 */
	public String getMimeType();

	/**
	 * Returns true if the exporter should serve the results up to the browser as an attachment
	 * @return true if the exporter should serve the results up to the browser as an attachment
	 */
	public boolean isAttachment();
}
